home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 5
/
Gekikoh Dennoh Club Vol. 5 (Japan).7z
/
Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin
/
internet
/
webx
/
jpged26s.lzh
/
DECODE.S
< prev
next >
Wrap
Text File
|
1996-11-10
|
8KB
|
427 lines
*
*
* DECODE.S
*
* ânâtâ}âôò£ìåë╗
*
include DOSCALL.MAC
include JPEG.MAC
include work.inc
.text
.cpu 68000
.xref PrintWI
.xref PrintW
.xref IllegalJPEG,work_adrs
.xref Zigzag,Zigzag_Y
inGetC macro
local inGetC1
*GetC▓▌╫▓▌ôWèJ Start
dbra d7,inGetC1 #10
bsr GetBuf #20
inGetC1
move.b (a5)+,d5 #8
moveq.l #8,d6 #4
*GetC▓▌╫▓▌ôWèJ end
endm
******************************************************************************
*
* ânâtâ}âôò£ìåôⁿù═üiécébɼò¬üjüòïtù╩Äqë╗üòïtâWâOâUâO
*
* a0.l âfü[â^ù╠êµ
* a1.l écébânâtâ}âôû╪âeü[âuâïüiéWârâbâgò¬üj
* a2.l æOë±é╠écébù╠êµ
* a4.l ïtù╩Äqë╗├░╠▐┘
* a5.l âoâbâtâ@ü[âAâhâîâX
*
* d7.w LastFFxxSize
* d6.w rlen ÄcéΦârâbâgÆ╖
* d5.l buffer
******************************************************************************
.xdef DecodeDCAC
DecodeDCAC
*╩╠╧▌òäìåé╞DCÆlé≡8bitò¬êΩïCé╔âfâRü[âh
*------------------------
move.w d5,d3
clr.b d3
lsr.w #8-3-2,d3
move.l (a1,d3.w),d2
*├▐║░─▐é╡é╜╦▐»─ò¬é╛é»Ä╠é─éΘ
*--------------------
cmp.b d2,d6
bhi @f
lsl.w d6,d5
sub.b d6,d2
inGetC
@@
lsl.w d2,d5
sub.b d2,d6
swap.w d2
bpl dc_lower_8bit ├▐║░─▐é═8bitê╚ë║é┼éáéΘ
*ÄcéΦé╠╩╠╧▌òäìåé≡├▐║░─▐
*--------------------------
rept 8
add.w d5,d5 #4
addx.w d2,d2 #4
subq.w #1,d6 #4
bne @f #10
inGetC
@@
add.w d2,d2 #4
move.w (a1,d2.w),d2 #14
bmi dc15 #10
endm
bra IllegalJPEG
dc15
tst.b d2 #4
bnz dc40 #10,14 DCÆlô╟é▌ì₧é▌é╓
*DCÆlé═0é┼éáéΘ
*-------------------------------
move.w (a2),d0
bmi dc90
move.l (a4)+,a2
move.w (a2,d0.w),(a0)
bra DECODE_AC
*DCÆléαêΩÅÅé╔├▐║░─▐é╡é╜é⌐üH
*---------------------------------
dc_lower_8bit
move.w 4(a1,d3.w),d0
bne dc75 é╡é╜
*DCÆlé╠├▐║░─▐
*--------------------------------
move.w 6(a1,d3.w),d2
*DCÆlô╟é▌ì₧é▌
*----------------------------------------------
dc40
not.w d5
ext.l d5
not.w d5
cmp.b d2,d6
bhi @f
lsl.l d6,d5
sub.b d6,d2
inGetC
cmp.b d2,d6
bhi @f
lsl.l d6,d5
sub.b d6,d2
inGetC
@@
lsl.l d2,d5
sub.b d2,d6
move.l d5,d0
swap d0
add.w d0,d0
dc75
bpl @f
addq.w #2,d0
@@
add.w (a2),d0
move.w d0,(a2)
bmi dc90
*DCÆlé╠ì╖ò¬é¬É│é╠ÅΩìç
*-------------------
move.l (a4)+,a2
move.w (a2,d0.w),(a0)
bra DECODE_AC
dc90
*DCÆlé╠ì╖ò¬é¬òëé╠ÅΩìç
*-------------------
move.l (a4)+,a2
move.w -2(a2,d0.w),(a0)
******************************************************************************
*
* ânâtâ}âôò£ìåôⁿù═üié`ébɼò¬üjüòïtù╩Äqë╗üòïtâWâOâUâO
*
* a0.l âfü[â^ù╠êµ
* a1.l é`ébânâtâ}âôû╪âeü[âuâïüiéWârâbâgò¬üj
* a4.l ïtù╩Äqë╗├░╠▐┘
* a5.l âoâbâtâ@ü[âAâhâîâX
* a3.l âWâOâUâOâeü[âuâï
*
* d7.w ndata âoâbâtâ@ü[ôαâfü[â^Éö
* d6.w rlen ÄcéΦârâbâgÆ╖
* d5.l buffer
* d1.b FFdxFlag
*
* d2 ssss
* d3 nnnn
* d4 Zigzag destination
*
******************************************************************************
.xdef DECODE_AC
DECODE_AC
moveq.l #63*2,d4
*╩╠╧▌òäìåé╞ACÆlé≡8bitò¬êΩïCé╔âfâRü[âh
*------------------------
ac10
move.w d5,d3 #4
clr.b d3 #4
lsr.w #8-3-2,d3 #10
lea.l 8(a1,d3.w),a2 #12
move.l (a2)+,d2 #12
*├▐║░─▐é╡é╜╦▐»─ò¬é╛é»Ä╠é─éΘ
*--------------------
cmp.b d2,d6 #4
bhi @f #10
lsl.w d6,d5
sub.b d6,d2
inGetC
@@
lsl.w d2,d5 #6+2n
sub.b d2,d6 #4
swap.w d2
bmi ac_normal 8bit├▐║░─▐é╢éßæ½éΦé╚éó
*ACÆléαêΩÅÅé╔├▐║░─▐é╡é╜é⌐üH
*---------------------------------
move.w (a2)+,d0
bnz ac_decoded é╡é╜
move.w (a2),d3 #8 d3=ACÆlé╠╦▐»─Éö
*ACÆlé╠├▐║░─▐
*--------------------------------
ACValueRead
*ACÆlô╟é▌ì₧é▌
*---------------------------
not.w d5 #4
ext.l d5 #4
not.w d5 #4
cmp.b d3,d6 #4
bhi @f #10
lsl.l d6,d5
sub.b d6,d3
inGetC
cmp.b d3,d6
bhi @f
lsl.l d6,d5
sub.b d6,d3
inGetC
@@
lsl.l d3,d5 #8+2n
sub.b d3,d6 #4
*ACÆlÅæé½ì₧é▌
*-----------------------
move.l d5,d0
swap.w d0
add.w d0,d0
ac_decoded
*0é╠î┬Éöò¬é╛é»0é≡Åæé½ì₧é▐
*------------------------------
add.w d2,d2 d2.w=éOé╠î┬Éö*2
beq ac17 #10
sub.b d2,d4
bls ac_EOB éOé╠î┬Éöé¬ÄcéΦé╠é`ébù╠êµé≡Æ┤éªé╜
clr.w d3
add.w d2,d2
add.w d2,a4
neg.w d2
jmp ac17(pc,d2.w)
rept 16
adda.w (a3)+,a0
move.w d3,(a0)
endm
ac17
adda.w (a3)+,a0 #14
move.l (a4)+,a2 #12
move.w (a2,d0.w),(a0) #18 *AC
subq.w #2,d4
bnz ac10
rts
*EOBé┼éáéΘ
*-----------------------
ac_EOB
add.b d2,d4 d4.w = 0é╠î┬Éö
ac_EOB2
rts
*ÄcéΦé╠╩╠╧▌òäìåé≡├▐║░─▐
*--------------------------
ac_normal
rept 8
add.w d5,d5
addx.w d2,d2
subq.w #1,d6
bne @f
inGetC
@@
add.w d2,d2
move.w 8(a1,d2.w),d2
bmi ac15
endm
bra IllegalJPEG
ac15
tst.b d2
bze ac_EOB2 EOBé┼éáéΘ
moveq.l #$000f,d3 #4
and.w d2,d3 AC #4
lsr.b #4,d2 Run #16
bra ACValueRead
******************************************************************************
*
* âtâ@âCâïô╟é▌ì₧é▌($FFxxé╠Åêù¥éαé▒é▒é┼ìséñ)
*
* ôⁿù═ a5.l ô╟é▌ì₧é▌▒─▐┌╜
* d1.w 0)$FFé≡ô╟é▌ì₧é±é╛ -1)ô╟é▌ì₧é±é┼éóé╚éó
* d7.l high)╩▐»╠ºÄcéΦ╩▐▓─Éö
* Åoù═ d7.l high)╩▐»╠ºÄcéΦ╩▐▓─Éö
* low)ăé╠$FFé▄é┼üAûöé═üA╩▐»╠ºì┼îπé▄é┼é╠╩▐▓─Éö
* d1.w 0)$FFé≡ô╟é▌ì₧é±é╛ -1)ô╟é▌ì₧é±é┼éóé╚éó
* a5.l ô╟é▌ì₧é▌▒─▐┌╜
* öjë≤ d0.l,d6.l
******************************************************************************
.xdef GetBuf
GetBuf
*ÄcéΦé╠╩▐»╠º╩▐▓─Éöĵô╛
*-----------------------
swap.w d7 #4
*é╨é╞é┬æOé╠╩▐▓─é¬$FFé╠ÅΩìçüAăé╠╩▐▓─é¬$00,$FF,$Dxé⌐┴¬»╕é╖éΘ
*-----------------------
tst.w d1 #4
bnz GetBufSearchFF é╨é╞é┬æOé╠╩▐▓─é═$FFé┼é═é╚éó #10
1:
dbra.w d7,2f #10
bsr GetBufAllSub
2:
move.b (a5)+,d0 #8
beq GetBufSearchFF $00é╠ÅΩìç($FF00) #10
cmp.b #$d0,d0 #8
bcs GetBufFFxxErr $D0ê╚ë║é╠║░─▐é═┤╫░ #10
cmp.b #$df,d0 #8
bls.b GetBufFFDx $Dxé╠ÅΩìç #10
cmp.b #$ff,d0
beq 1b $FFé╠ÅΩìç
bra GetBufFFxxErr ┤╫░
GetBufFFDx
*$FFDxé╠ÅΩìçüAô╟é▌ì₧é▌ôrÆåé╠╦▐»─é≡öjèⁿé╖éΘ
*------------------
moveq.l #0,d0
move.w d0,preDC(a6)
move.l d0,preDC+2(a6)
move.w d0,rlen(a6)
GetBufFFDxLoop
dbra d7,@f
bsr GetBufAllSub
@@
move.b (a5)+,d5
lsl.w #8,d5
cmp.w #$ff00,d5
bne GetBufSearchFF ăé╠╩▐▓─ĵéΦì₧é▌
GetBufFFDxChkFFxx
dbra d7,@f
bsr GetBufAllSub
@@
move.b (a5)+,d0
beq GetBufSearchFF ăé╠╩▐▓─ĵéΦì₧é▌
cmp.b #$ff,d0
beq GetBufFFDxChkFFxx $FFFFé╚éτû│Äï
and.b #$f0,d0
cmp.b #$d0,d0
beq GetBufFFDxLoop é▄é╜$FFDxé¬ùêé╜
GetBufFFxxErr
subq.l #1,a5
addq.w #1,d7
*$FFîƒì⌡
*--------------------
GetBufSearchFF
dbra.w d7,@f #10
bsr GetBufAllSub
@@
move.l a5,d6 #4
moveq.l #-1,d0 #4
@@ cmp.b (a5)+,d0 #8
dbeq d7,@b #10
sne.b d1 #6
ext.w d1 #4 d1=$0000)ö¡î⌐Ä₧ -1)ûóö¡î⌐Ä₧
sub.w d1,d7 #4 ûóö¡î⌐Ä₧ d7=d7+1
swap.w d7 #4
move.w a5,d7 #4
move.l d6,a5 #4
sub.w d6,d7 #4
subq.w #1,d7 #4
rts #16
**************
* ôⁿù═ é╚é╡
* Åoù═ d7 ô╟é▌ì₧é±é╛╩▐▓─Éö
* a5 ô╟é▌ì₧é▌èJÄn▒─▐┌╜
* öjë≤ d0.l
**************
GetBufAllSub
move.l buf_size(a6),-(sp)
movea.l buf_adrs(a6),a5
move.l a5,-(sp)
move.w Jhandle(a6),-(sp)
DOS _READ
lea.l 10(sp),sp
move.l d0,d7
bmi IllegalJPEG ô╟é▌ì₧é▀é╚éó
bnz @f
*é▒éΩê╚Åπ╠º▓┘é╚é╡é╚é╠é┼üADummy DataÉ▌ÆΦ
*---------------------
tst.l errflg(a6)
bnz IllegalJPEG ô╟é▌ì₧é▀é╚éó
move.l #-1,errflg(a6)
move.l #$ff00ff00,(a5)
addq.w #4,d7
@@
subq.w #1,d7
rts
******************************************************************************
*
* pre DECODE
*
* ôⁿù═ û│é╡
* Åoù═ d1 FFxxFlag(a6)É▌ÆΦÆl
* d5 rdata(a6)É▌ÆΦÆl
* d6 rlen(a6)É▌ÆΦÆl
* d7 LastBufSize(a6),LastFFxxSize(a6)É▌ÆΦÆl
* a5 NextFFxxAdrs(a6)É▌ÆΦÆl
* öjë≤ d0.l
******************************************************************************
.xdef preDECODE
preDECODE
clr.w -(sp)
move.l file_point(a6),-(sp)
move.w Jhandle(a6),-(sp)
DOS _SEEK
addq.l #8,sp
moveq.l #0,d1
move.w d1,preDC(a6)
move.l d1,preDC+2(a6)
move.l d1,errflg(a6)
moveq.l #0,d7
moveq.l #-1,d1
bsr GetBuf
move.b (a5)+,d5
lsl.w #8,d5
inGetC
rts
.end